O pacote reprodutibilidade foi desenvolvido para apoiar as etapas de elaboração dos indicadores da plataforma AdaptaBrasil. Como o processo de criação dos índices e indicadores envolve diversas fases — incluindo validação e análises estatísticas — o pacote oferece funções que facilitam a criação, verificação e divulgação dos resultados de forma rastreável e reprodutível.
O fluxograma apresentado ilustra o fluxo de tratamento e preparação dos dados dentro do processo analítico da plataforma AdaptaBrasil. Ele representa a sequência de etapas aplicadas aos dados brutos antes da execução das análises estatísticas e da construção dos indicadores.
O processo inicia com a verificação do tipo de variável, diferenciando dados do tipo Score de variáveis numéricas. Para variáveis numéricas, ocorre a identificação de outliers e, se necessário, aplica-se a winsorização, que reduz o impacto de valores extremos sem removê-los. Em seguida, os dados são avaliados quanto à assimetria e curtose, de modo a identificar distorções na distribuição. Quando essas distorções são significativas, utiliza-se a transformação Box-Cox, que corrige desvios de normalidade e estabiliza a variância.
Após o ajuste da distribuição, os dados passam pela normalização, permintido a comparabilidade entre diferentes variáveis e unidades de medida. Por fim, realiza-se a análise de correlação, que permite avaliar as relações entre os indicadores e seguir para as etapas subsequentes de modelagem e composição dos índices.
Esse fluxo propricia reprodutibilidade e consistência estatística dos dados processados, consolidando a qualidade das informações analisadas. Para iniciar, é necessario instalar o pacote disponivel no GitHub, sendo inicialmente desenvolvido em ambiente windows 11.
library("reprodutibilidade")
inxlsx <- openxlsx::loadWorkbook(file = "DATASET/Base_inicial_SA_Acesso.xlsx")Lendo as planilhas do arquivo, nesse caso a planilha metadados, contem as informações sobre os indicadores que serão analisados como:
Enquanto a planilha “Dados_SA_Acesso” contém nas três (3)
colunas iniciais as informações de georeferenciamento como: GEOCOD, NOME
do Município, Unidade Federativa (UF), em seguida deve conter as colunas
referentes aos índices/indicadores descritos na planilha metadados,
sendo que o número total de linhas deve ser igual ao numero total de
municípios avaliados e o número total de colunas deve ser igual ao
numero ao valor máximo encontrado na coluna N
dos metadados.
A Figura abaixo ilustra as planilhas usadas no fluxo do pacote — contém
exemplos de formatos e campos esperados (georeferenciamento, nome do
município, estado, região e cluster). Na planilha
Dados_SA_Acesso — as coluna 1–3 são referências, as
demais colunas correspondem aos indicadores por município.
##
## Arquivo de exemplo 'Base_inicial_SA_Acesso.xlsx' carregado com sucesso!
## O arquivo foi lido a partir do pacote 'reprodutibilidade'.
## As planilhas disponiveis sao: 'metadados' e 'dados_SA_Acesso'.
## Acesse-as com: resultado$metadados ou resultado$dataset
metadados <- resultado$metadados
dataset <- resultado$dataset
# Recortando apenas os dados do Nivel 7
metadadosN7 = subset(metadados,metadados$Nivel==7)
# Selecionando apenas as referencias
data_ref = dataset[,c(1:3)]
# Selecionando todos os dados
datasetN7 = round(dataset[,-c(1:3)],2)
#Atribuindo nome as colunas
colnames(datasetN7) <- colnames(dataset[,-c(1:3)])Essa função obtem estastitiscas básicas de apenas um único indicador, para executar o cálculo de forma correta, atentar para objeto class_type que se refere a classe do objeto, sendo um objeto Numérico é a escrita deve ser a seguinte: “Numerico”.
library("reprodutibilidade")
# Carregando a base de dados de exemplo
data("datasetN7", package = "reprodutibilidade")
idx_MMPD = datasetN7$MMPD
nome = "MMPD"
res1 = criar_resumo(idx_MMPD,"Numerico" , "MMPD")## Nome Classe
## 1 MMPD Numerico
##
## Resumo Estatistico da Variavel
##
## Variavel: MMPD
## Classe: Numerico
##
## Min : 2.33
## Quartil 1 : 2.89
## Mediana : 3.09
## Quartil 3 : 3.36
## Max : 4.06
## Outliers_Per : 3.99
## NAs : 5
## Percentual_NAs : 0.09
## Valores_Unicos : 278
## Percentual_Unicos : 5
##
criar_grafico(idx_MMPD, plot=TRUE, nome_arquivo = "grafico_combinado.png",
largura = 10, altura = 5, dpi = 25,
icode="MMPD",fsize=6)A função ADPresumo(dataset, class_types, clusters, nomes) executa a geração padronizada de resumos descritivos para cada variável de um conjunto de dados.
O procedimento interno da função envolve:
Verificação da consistência entre o número de colunas do dataset e os vetores informados;
Resumir as medidas descritivas de cada variavel;
Combinação dos resultados em um único quadro (resumo_combinado);
Gerando três objetos de saída:
resumo_total: resumo completo de todas as variáveis;
resumo_basico: tabela transposta com estatísticas principais;
resumo_na: resumo focado em valores ausentes.
library("reprodutibilidade")
# Carregando a base de dados de exemplo
# Metadados
data("metadadosN7", package = "reprodutibilidade")
# Dataset
data("datasetN7", package = "reprodutibilidade")
# Dataset referencia
data("data_ref", package = "reprodutibilidade")
resumo <- ADPresumo(datasetN7,
metadadosN7$CLASSE,
colnames(datasetN7))##
## Resumo Geral Obtido
## # A tibble: 22 × 12
## Nome Classe Min `Quartil 1` Mediana `Quartil 3` Max Outliers_Per NAs
## <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <int>
## 1 MMPD Numer… 2.33 2.89 3.09 3.36 4.06 3.99 5
## 2 MCFSFC… Numer… 0 0.06 0.1 0.13 0.23 1.51 5
## 3 PED(CI) Numer… 29.2 44.9 49.6 56.9 74.8 1.92 5
## 4 DRDAFD Numer… 0 0.11 0.22 0.37 0.76 1.71 0
## 5 QA Numer… 5 5 5 5 5 12.3 2605
## 6 DCAU10… Numer… 0 0.69 4.1 11.2 27.0 3.16 2
## 7 SRAAB Numer… 0.02 0.29 0.4 0.47 0.74 8.1 0
## 8 NIAN Numer… 0.2 0.2 0.6 0.6 1 0 5
## 9 PCM2AD Numer… 0 0 0.28 0.81 2.02 5.6 0
## 10 ODRSAI Numer… 0 0.27 1.3 3.6 8.59 5.89 0
## # ℹ 12 more rows
## # ℹ 3 more variables: Percentual_NAs <dbl>, Valores_Unicos <int>,
## # Percentual_Unicos <dbl>
Essas funções tem como objetivo reduzir o impacto dos valores extremos (outliers) do conjunto de dados, reprojetando os mesmos para valores próximos a limiares baseados nos percentis inferiores e superiores de cada variável.
##
## Resumo Winsorize Criado
## nome classe winsorize linf lsup n_outlier n_na
## 1 MMPD Numerico S 2.33 4.06 222 5
## 2 MCFSFCBR Numerico S 0 0.24 84 5
## 3 PED(CI) Numerico S 29.17 74.85 107 5
## 4 DRDAFD Numerico S 0 0.76 103 0
## 5 QA Numerico N 5 5 686 2605
## 6 DCAU10MILH Numerico S 0 26.98 176 2
## 7 SRAAB Numerico A 0.02 0.74 451 0
## 8 NIAN Numerico I 0.2 1 0 5
## 9 PCM2AD Numerico S 0 2.03 312 0
## 10 ODRSAI Numerico S 0 8.6 328 0
## 11 NSP Numerico A 0.23 0.71 39 0
## 12 IFPCPESIA Numerico S 0 0.99 163 0
## 13 IPGSA Numerico S 0.08 0.73 149 5
## 14 APNAE Numerico S 0 130.77 78 7
## 15 NAPURPAATSASMC Numerico S 0 0.18 146 4433
## 16 FPAAPCT Numerico N 0 100 0 2728
## 17 NAPCP1MC Numerico S 1 2110.5 78 4216
## 18 APBF Numerico A 0.11 1.68 36 5
## 19 IDRD Numerico S 0 0.29 71 10
## 20 DRPCS5SM Numerico S 0 40.26 78 10
## 21 DP Numerico S 0.13 111.84 647 5
## 22 PT Numerico S 0.01 0.39 425 0
##
## Resumo Winsorize Criado
##
## Winzorize aplicado no dataframe
##
##
plot(idx_MMPD,data_winsor$dataset$MMPD,
main = paste0("Comparação dados sem Winzorise X Dados com Winzorise \n Indicador: ",nome),
cex.axis=1,las=1,ylab="Dados Transformados",
xlab="Reference", cex.lab=0.8,cex.main=1) Essa função aplica da trnasformada BoxCox buscando corrigir assietria e estabilizar a variância, aproximando de uma distribuição normal.
library("reprodutibilidade")
# Carregando a base de dados de exemplo
data("metadadosN7", package = "reprodutibilidade")
data("datasetN7", package = "reprodutibilidade")
dados <- datasetN7[,19]
# Aplicando Box-Cox com pacote forecast
bxcx.fcs <- boxcox_transform(dados, metodo = "forecast")## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
## Box-Cox aplicado com metodo: forecast
## Box-Cox aplicado com metodo: COINr
## Box-Cox aplicado com metodo: yeojohnson
par(mfrow=c(1,3)) ; par(mar=c(5,4,6,1))
plot(sort(dados),sort(bxcx.fcs),
main = "Transformacao BoxCox \n via pacote Forecast",
cex.axis=1,las=1,ylab="Transformada BoxCox",
xlab="Reference", cex.lab=0.8,cex.main=1)
plot(sort(dados),sort(bxcx.coin),
main = "Transformacao BoxCox \n via pacote COINr",
cex.axis=1,las=1,ylab="Transformada BoxCox",
xlab="Reference",cex.lab=0.8,cex.main=1)
plot(sort(dados),sort(bxcx.yjn),
main = "Transformacao BoxCox \n via pacote bestNormalize::Yeojohnson",
cex.axis=1,las=1,ylab="Transformada BoxCox",
xlab="Reference",cex.lab=0.8,cex.main=1)Excutando a função que aplica as métricas, Cria uma lista chamado
result, onde estão os resultados das metricas aplicadas.
Salvando em dois (2) arquivos .xlsx no diretório OUTPUT
O primeiro ANALISE_DESCRITIVA_SETOR_DATA_HORA.xlsx
O segundo DADOS_TRATADOS_SETOR_DATA_HORA.xlsx
caminho_arquivo <- system.file("dataset",
"Base_inicial_SA_Acesso.xlsx",
package = "reprodutibilidade")
result = Tratamento(input=caminho_arquivo,
metadados = "metadados",
dataset = "dados_SA_Acesso",
nivel=7,
method_boxcox="forecast",
sigla = "SE",
subsetor= NULL)##
## Resumo Geral Obtido
##
## Resumo Winsorize Criado
##
## Winzorize aplicado no dataframe
##
##
## Box-Cox aplicado com metodo: forecast
##
## BoxCox aplicado no dataframe
##
##
##
## Normalizacao Aplicada no data.frame
##
## Arquivos .xlsx Gerados
## ANALISE_DESCRITIVA_SE_2025-12-12_11h55m.xlsx
## DADOS_TRATADOS_SE_2025-12-12_11h55m.xlsx
Observações importantes das funções de criação dos mapas:
Sugestão antes de executar, criar o diretório FIG, na função inserir dir = “FIG”, dessa maneira a função irá salvar a imagem diretamente nesse diretório.
# definindo o caminho da base de dados no formato .xlsx
caminho_arquivo <- system.file("dataset",
"Base_inicial_SA_Acesso.xlsx",
package = "reprodutibilidade")
# gerando os resultados e salvando em .xlsx
result = Tratamento(input=caminho_arquivo,
metadados = "metadados",
dataset = "dados_SA_Acesso",
nivel=7,
method_boxcox="forecast",
sigla = "SE",
subsetor= NULL)
# Determinado o indicador que será apresentado
icode <- "MMPD"
# Criando os gráficos de resumo
criar_grafico(result$DadosB[[icode]],
plot=FALSE,
nome_arquivo = "grafico_combinado.png",
largura = 10, altura = 5, dpi = 100,
icode="MMPD", fsize=18)
# Gerando a figura do mapa
map_result(icode,
result$DadosB,
result$Ref,
fs = 30,
Titulo = icode,
salvar=TRUE)
slides_descricao(result, icode,
titulo=NULL,
caminho_arquivo = "saida_apresentacao.pptx",
caminho_imagem = "grafico_combinado.png",
caminho_map = "map_N7.png") map_result(icode,
result$Data_Win$dataset[1,],
result$Ref,
fs = 30,
Titulo = icode,
salvar=TRUE)
slides_process(
result$Data_Win$resumo[1,],
process = "winsorize"
titulo = "Tabela Gerada no R",
caminho_arquivo = "slide_process_winsorize.pptx",
caminho_map = "arquivo_mapa.png") map_result("FPAAPCT", result$Data_Bxc$data, result$Ref,
fs = 26,
titulo = "FPAAPCT",
salvar = TRUE)
slides_process(result$Data_Bxc$meta[16,],
process = "BoxCox"
titulo = "Titulo do slide",
caminho_arquivo = "saida_apresentacao_bxcx.pptx",
caminho_map = "FPAAPCT_result$Data_Bxc$data.png") grafico_final(result$Data_Bxc$data, result$Data_Normal$dataset,
nome_arquivo = "grafico_final.png",
largura = 20,
altura = 10,
dpi = 100,
icode = "MMPD",
fsize = 32)
map_result_normal("MMPD", result$Data_Normal$dataset, result$Ref,
fs = 10,
titulo = "MMPD",
salvar = TRUE,
nome_arquivo = "mapa_normalizado.png")
slides_normal(datain = result$Data_Bxc$data[[icode]],
titulo = "Titulo Slide",
title_tab = "Testes Estatísticos",
caminho_arquivo = paste0("saida_apresentacao_normal.pptx"),
caminho_map = "mapa_normalizado.png" ,
caminho_grafico = "grafico_final.png" )## max_pcor var_max
## "0.681171907806749" "drat"
## Cor_Max Cor_Par
## MMPD "0.650869856375549" "PED(CI)"
## MCFSFCBR "0.665934427027578" "PED(CI)"
## PED(CI) "0.799845828299096" "DRPCS5SM"
## DRDAFD "0.381128913409374" "DP"
## QA "0.24205585883426" "DP"
## DCAU10MILH "0.534066700481322" "DRPCS5SM"
##
## Metricas de Avaliacao Calculadas.
## Indicador Cor_Max Cor_Par_Indicador Sugestao_Remocao
## 1 MMPD 0.652 PED(CI) Remover (Correl alta)
## 2 MCFSFCBR 0.667 PED(CI) Remover (Correl alta)
## 3 PED(CI) 0.800 DRPCS5SM Remover (Correl alta)
## 4 DRDAFD 0.378 DP Manter
## 5 DCAU10MILH 0.534 DRPCS5SM Manter
## 6 SRAAB 0.335 DP Manter
##
## Figura de Contagem de NA's Gerada
CODES = result$metadados$CODE
for(i in CODES)
{
icode <- i
nome <- result$metadados$NOME[result$metadados$CODE == icode]
# Criando os gráficos de resumo
criar_grafico(result$DadosB[[icode]],
plot=FALSE,
nome_arquivo = paste0("FIG/grafico_combinado_",icode,".png"),
largura = 10, altura = 5, dpi = 100,
fsize=18)
# Gerando a figura do mapa
map_result(icode,
result$DadosB,
result$Ref,
fs = 30,
nome_arquivo = paste0("FIG/mapa_bruto_",icode,".png"),
salvar=TRUE)
# Gerando o arquivo
slides_descricao(result, icode,
titulo=paste0(icode,"-",nome),
caminho_arquivo = "Apresentacao_Resumo_Total.pptx",
caminho_imagem = paste0("FIG/grafico_combinado_",icode,".png"),
caminho_map = paste0("FIG/mapa_bruto_",icode,".png"))
print(icode)
}CODES = result$metadados$CODE
for(i in CODES)
{
icode <- i
nn <- which(result$Data_Bxc$meta$Nome == icode)
nome <- result$metadados$NOME[result$metadados$CODE == icode]
# Gerando a figura do mapa
map_result(icode, result$Data_Win$data, result$Ref,
fs = 26, titulo = icode,
nome_arquivo = paste0("FIG/mapa_win_",icode,".png"),
salvar=TRUE)
# Gerando arquivo
slides_process( result$Data_Win$resumo[nn,],
process = "winsorize",
titulo = paste0(icode,"-",nome),
caminho_arquivo = paste0("Apresentacao_Winzorization_Total.pptx"),
caminho_map = paste0("FIG/mapa_win_",icode,".png"))
print(icode)
}CODES = result$metadados$CODE
for(i in CODES)
{
icode <- i
nn <- which(result$Data_Bxc$meta$Nome == icode)
nome <- result$metadados$NOME[result$metadados$CODE == icode]
map_result(icode, result$Data_Bxc$data, result$Ref,
fs = 26, titulo = icode,
nome_arquivo = paste0("FIG/mapa_bxcx_",icode,".png"),
salvar=TRUE)
slides_process( result$Data_Bxc$meta[nn,],
process = "BoxCox",
titulo = paste0(icode,"-",nome),
caminho_arquivo = "Apresentacao_Boxcox_Total.pptx",
caminho_map = paste0("FIG/mapa_bxcx_",icode,".png"))
print(icode)
}O indicador PED(CI) (terceira coluna da base de dados) apresentou erro na geração do grafico final, unicamente nessa etapa, por esse motivo foi removida da execução nesta etapa.
CODES = result$metadados$CODE[-3]
for(i in CODES)
{
icode <- i
nn <- which(result$Data_Bxc$meta$Nome == icode)
nome <- result$metadados$NOME[result$metadados$CODE == icode]
map_result_normal(icode, result$Data_Normal$dataset, result$Ref,
fs = 10,
titulo = icode,
salvar=TRUE,
nome_arquivo=paste0("FIG/mapa_norm_",icode,".png"))
grafico_final(dtset_proc = result$DadosB,
dtset_norm = result$Data_Normal$dataset,
nome_arquivo = paste0("FIG/grafico_final_",icode,".png"),
largura = 20,
altura = 10,
dpi = 100,
icode=icode,
fsize=32)
slides_normal(datain=result$DadosB[[icode]],
titulo = paste0(icode,"-",nome),
title_tab = "Testes Estatísticos",
caminho_arquivo = "Apresentacao_Norm_Total.pptx",
caminho_map = paste0("FIG/mapa_norm_",icode,".png") ,
caminho_grafico = paste0("FIG/grafico_final_",icode,".png"))
print(icode)
}O Fator de Inflação da Variância (VIF) foi utilizado para avaliar a presença de multicolinearidade entre as variáveis que compõem o indicador, permitindo identificar redundâncias excessivas que podem distorcer as estimativas e comprometer a interpretação dos resultados. Valores elevados de VIF indicam sobreposição de informação entre variáveis e sinalizam a necessidade de revisão da estrutura do indicador. #### ADPvif(X)
O alfa de Cronbach é utilizado para avaliar a consistência interna do conjunto de variáveis, isto é, o grau em que elas medem de forma coerente um mesmo construto. A análise do alfa com a remoção individual dos indicadores permite verificar em que medida o valor permanece próximo ao valor global, o que reforça a estabilidade do indicador composto. Observa-se que a exclusão de alguns indicadores provoca variações no alfa, indicando contribuições diferenciadas para a consistência interna do conjunto.
result_metricas <- resumo_metricas(result$Data_Normal$dataset)
# FigCorrelPlot(result_metricas$pcorrel,tipo="Parcial",nfile="nome_arquivo.png")
# FigCorrelPlot(result_metricas$pcorrel,tipo="Total",nfile="nome_arquivo.png")
# FigVIF(result_metricas$VIF,nfile="nome_arquivo.png",visivel=FALSE)
# plotAlphaCronbach(result_metricas$AlphaCronbach$alpha_df,
result_metricas$AlphaCronbach$alpha_total,
visivel=FALSE,
nfile="nome_arquivo.png")
result_metricas$Res_visivel